程式導師計畫 4th / 前四週學習心得


Posted by 生菜 on 2020-08-06

前情提要

程式導師計畫第四期從 6/12 開始,到今天已經第七週了,此篇「第幾週」並不是根據實際時間,而是以 課綱 為主。這篇同時作為第五週的作業,整理加入計畫後至今的心得。

這篇會有什麼

內含ㄉ技能

  1. Command line 的使用
  2. Git 的基本操作
  3. JavaScript 基本語法及程式思維
  4. 網路基本概念

每週ㄉ速記

  1. 筆記
    多花時間額外做的筆記。
  2. 心得
    簡單紀錄,可能會偷偷挪用每日進度內容。
  3. 其他養分
    在 Coding 前,先好好生活。
  4. 自我檢測題簡答
    假裝自己在面試,用幾句話簡單回答。

每週速記

第一週(06/12 ~ 06/21):暖身週

實際時間: 6/12 ~ 6/23

筆記

[DAY4] 初學Command Line
[DAY8] 初學 Git (上)
[DAY9] 初學 Git (下)

心得

去年大學畢業終於被體制拋出,因為興趣太廣泛不知道要選哪個,乾脆毫無規劃的隻身一人到台南,以為隨便找份工作,過了一年什麼都不做,就會忽然知道自己要做什麼了。結論是我果然還太天真了,不只工作難找,畢業滿一年的今天,除了每天都有甜爆的美食,我依然是那個沒有方向的自己。

前幾天接到很久沒聯絡的學妹電話,說她找到了一份還不錯的工作,並問我在幹嘛。
「目前沒有工作啊。」我小海豹化。
然後不意外的被唸——都 23 歲,了是時候該為未來做打算了吧。
「……啊,但是我在學程式設計ㄛ。」
『三小?你不是心理系的嗎?』對欸,我都忘記這個設定了。
關於為什麼要學程式,這半年的契機太羞恥了請允許我先跳過。不過其實也不是最近裝水時才突發奇想,退一萬步也是高中裝水想到,早在升大學時就有想過填資工系了,最後因為いろいろ原因沒去。(請放過我留一些下次寫心得時可以講的故事 XD)

總之,這半年決定要學程式設計後,又跌跌撞撞了一段路,加上求職和就業等失敗經驗,送出履歷前大概是我對自己未來最絕望了時刻。就連履歷送出去前,都被幫忙看履歷的朋友看雖。當初想如果沒上我就試試看北科大的 Coding365 ,再不行就乖乖考個研究所好了,反正以我現在的能力出社會只會被打爆。終於,在一年內被拒絕無數次之後,居然收到 Huli 的信說我進了???

在快樂的像是(至少是我想像中的)蜜月期劈哩啪啦註冊完所有帳號後,用心發了自我介紹以及和同學社交(但又不能積極到被發現是怪咖qq),我馬上面臨第一個困難——如何上線上課程。

這個問題聽起來很白癡,不就跟到學校上課一樣嗎?但環境不同真的差超多,而且想偷懶的時候只要按暫停就可以去摸魚,超級考驗自制力的。尤其 CML 和 Git 雖然大家都說很帥很像駭客,不過實際上就是成就感超低的啊。這個問題到我將速度調快到一點五倍才暫時被改善(所以後來直播時是我第一次聽 Huli 用一倍速說話XD)。最嚴重的問題是,我該如何做筆記和寫每日進度?爬前幾屆同學的筆記,這已經不只是程式設計的計畫了,根本是筆記整理和幹話訓練班吧(???)

欸爆字數了,第二週心得待續好ㄌ

在 Coding 前,先好好生活

  • 小說《她的身體與其他派對》
  • 電影《蚵豐村》
  • 影集《Brookyn 99》
  • 左營看日蝕
  • 高雄鹽埕第一市場

自我檢測簡答

  • 你說得出程式如何執行
  • 你理解寫程式的本質只是一行行的指令
    以上兩題一起回答好了,程式不只是一行一行的指令,他還可以被化約成 2 進位的數字。(是這樣回答嗎我不確定qq)
  • 你了解前端與後端的區別
    使用者可以看的到的部分都是前端,像是新增網頁和設計;後端則是負責和資料庫溝通。
    用 Google 表單類比的話,我們在填寫表單時回答的問題是前端負責;如果設計者針對大家的回應開一個試算表,那麼和這個試算表溝通就是後端的工作。
    當然大部分的功能需要前後端合力才能達成,例如用搜尋引擎時,前端負責接收我們輸入的關鍵字,交給後端去資料庫中尋找,並回傳結果給前端,最後由前端顯示結果。
  • 你能說出從發出一個 request 到接收 response 中間發生的事
    1. 你傳送 request 給瀏覽器。這裡又細分瀏覽器傳給作業系統,再傳送給硬體,這裡瀏覽器、作業系統和硬體就像郵差送信一樣。
    2. 傳送到 DNS Surver , DNS Surver 會回傳 IP 位置給前端。
    3. 前端將 requst傳送到 IP 位置。
    4. Google 的 Surver 去 DB 找資料。
    5. 沿著原來的路徑傳送 Rrsponse 給 Survur 、硬體,作業系統、瀏覽器。
    6. 我們會在瀏覽器上看到結果。
  • 你了解不同載具的差異在哪(Desktop、Mobile、Web)
  • 你了解基本的 command line 指令
  • 你知道 Git 在做什麼,以及為何我們需要 Git
    Git 是一種版本控制的系統,有點像遊戲的存檔點,幫你沿路存檔。就算只有自己做專案,還是會碰到「新功能開發到一半,要先停下來修 bug 」的狀況,更別說多人協作各自負責不同區塊的時候,這時候就需要 Git 。
  • 你知道 add、commit、push、pull 等基本 Git 指令

    另外 git pull <欲抓連結> 可將網路上的資料抓下來,與之相反的 git pull <branch> 可將資料傳上去。
  • 你知道怎麼使用 branch 並送出 Pull Request

    pull request 可於上傳資料後,打開 GitHub 最上方就可以送出了。
  • 你熟悉 Git Workflow(其實就是交作業的流程)
    1. 開一個新的分支
    2. 建立 commit
    3. pull request
    4. 其他人 review
    5. 合併回 master

第二週(06/22 ~ 06/28):程式基礎(上)

實際時間: 6/23 ~ 7/01

筆記

[Week2] 給自己看的 JavaScript 筆記 -運算
[Week2] 給自己看的 JavaScript 筆記-變數
[Week2] 給自己看的 JavaScript 筆記 - 迴圈、函式、其他觀念

心得

延續上一週,到底要如何寫出好看的筆記,最好是可以被助教勾選「值得參考」的呢?我花了超多時間想把筆記做得精美,寫了幾篇後發現 CP 值爆低,而且老師和助教都開始呼籲大家不要只顧著做筆記,推進進度比較重要。因此開始告訴自己 先求有再求好 ,雖然快了一點但效果還是有點差,這週給自己「幾小時挑戰」然後發現還是都超過了,因此之後幾週的策略就改成 沒有筆記也沒關係

雖然立志待業中所以每天要學 8 小時,但每天至少有兩三個小時花在自我懷疑和逃避。Git 對我來說是全新的東西,在還沒看作業說明前,我完全不知道還要追多遠才能跟上大家的進度,因此焦慮又更深了,「我根本就不適合程式設計,放棄好了,才剛開始就被這種挫折打敗的我,根本就不喜歡寫程式吧,我只是碰到問題就逃避的廢物——」之類的鬼打牆不斷消耗自己,又更無法學習了。

另一個很焦慮的點是,現在社會的傳統想像中人們應該要超級精通一個東西,但如果每個人的興趣像遊戲的技能點,我明顯就是點的很分散的那種人,因此好擔心對程式的熱忱不如我想像中高,甚至沒有到達客觀標準。

這個選擇真的是對的嗎?

然後我想到前幾天朋友告訴我他唸超難畢業又前途模糊的研究所,並不是因為「想要成為什麼樣的人」,而是「想看看可以走到哪裡」。這個想法讓我感到舒緩一點,也許就像平板撐一樣,再多堅持幾秒,因為我很想知道,跨過這些障礙之後,我能看到怎麼樣不同的風景。
我想看看那邊的風景。

練習 LIOJ 時有一題卡了好幾天,用了各種方法都卡住,才決定在 spectrum 上提問。後來發現只是錯一個字母 orz 後來在每日進度吐槽這件事, JAS0N 同學特別來向我澄清他其實有給我線索,才發現原來我看起來在怪他 qq 但其實大部分在和別人聊天的過程(尤其是訊息聊天),我都在擔心「要如何讓對方覺得跟我說話/幫我解答是值得的」。所以在此特別再感謝一次不知道會不會看到的 JAS0N 和 Huli 大大(合十)

自我檢測簡答

  • 你能靈活運用變數、迴圈、判斷式等等基本概念來解題
    可以(咦是這樣回答嗎????)
  • 你能一行行的說出現在程式在做什麼
    吃我 做給你看
  • 你知道「回傳」跟「輸出」的差異
    如果把函式比喻成黑盒子,input 一些東西就會 回傳 output,數學中的 f(x)=y 中的 y 就是回傳值。在 Javascript 中用 return 表示,如果沒有 return 則預設回傳值為 undefined
function print(a) {
  return a;
}

print('hello')
// 會回傳 hello ,但不會顯示任何東西
console.log(print('hello'))
// 印出 hello

相對的, console.log() 只是單純將內容 輸出

function print(a) {
  console.log(a);
}

print('hello')
// 印出 hello
console.log(print('hello'))
// undefined
  • 你可以把用文字寫好的演算法轉成程式碼
    咦???目前碰到的題目都還過得去???這個要怎麼證明辣跳過 XD

第三週(06/29 ~ 07/05):程式基礎(下)

實際執行: 7/1 ~ 7/14(整整兩個禮拜!)

筆記

[week3] 給自己看的 ES6 筆記

心得

截至這週為止,我都只落後一兩天。一開始的契機可能只是腰痛到站不好。醫生說不要搬重物,但我忽然發現缺乏運動的我的身體,本身就是重物 QQ 導致我只能在床上工作,而且變得好嗜睡,又因為連續一週沒有休息,太緊繃往回彈進度就推得很慢,有些日子甚至只學三四個小時。進度一落後壓力就變大,根據壓力曲線,壓力大到一個程度效率會降低,如此形成惡性循環。

沒有推進太多進度得時候,我也就不趕寫太多每日心得。後來發現拖延是太想要完美,既然這樣那就乾脆就先捨棄一部份的完美繼續往前好了——明明前幾個禮拜就有覺悟了,要實踐果然好難。

這週起大家陸陸續續開始約實體聚會了,因為在台南無法參加,我也開了兩次螢幕共享,效果都還不錯。後來 zangwang 同學傳訊息跟我說,《注意力協定》一書中提到類似的效果,這有點像是大聲說「我要來努力了!」,之後如果跟大家說「抱歉啊我是個沒有毅力的人,先去玩一下動物森友會。」其實是有壓力的,雖然也不是完全不能這樣做(畢竟人生是自己的),但羞恥心之類的會讓偷懶這件事要付出的代價變高(而且比起之後進度落後,這個代價是要先付出的會比較有感覺),因此可以用契約提高專注力。

另外好像不小心習慣偷懶了,直接進入倦怠期,尤其越來越沒有幹勁寫每日進度(要怎樣一直產出高質量心的辣——於是我又落入完美主義拖延的困境)。在心得上提到這件事, Wozski 同學(嗚嗚嗚同學人都好好)就來私訊我說,不妨將學習當作習慣,如果今天很不想做的話就從五分鐘開始,再慢慢延長,重點不是今天做了多好(甚至多好),而是讓自己習慣每天做這件事情。我之前一直以為運動或被單字才有習慣可言,沒想到光是持續跟完課就是一個毅力上的挑戰了。

在 Coding 前,先好好生活

  • 原來是戀愛漫畫的《炎拳》
  • 奇美博物館之影子魔幻展

自我檢測簡答

  • 你理解常用內建函式如何使用
    隨便列幾個常用的內建函式:
    str.lengtharr.length :回傳字串或陣列的長度。
    Number(str):將字串轉成數字。
    arr.join():將東西加入陣列中。
  • 你熟悉程式語法並知道如何解決基礎問題
    可以——一時想不到要寫什麼(#)
  • 你知道為什麼我們需要 unit test
    因為一個功能有很多部份 ,要是出錯的話,一個一個測試比較方便。
  • 你知道什麼是 unit test
    單元測試,就是將程式拆解成小部份(通常是模組或函式)分別測試。
  • 你知道如何寫 unit test
    1. console.log 加爆
    2. Jest (這裡之後回來補)
  • 你知道如何測試一個 function
    用單元測試(天好像鬼打牆……)

第四週(07/06 ~ 07/12):網路基礎

實際執行: 7/14 ~ 8/3

筆記

[Week4] JS 實作串接 API(一)
[Week4] JS 實作串接 API(二)
[Week4] JS 實作串接 API(三)

心得

因為之前偷偷學過一點 Python,這週終於又回到自己完全沒概念的東西了,懷抱忐忑的心情點開課程影片——咦,居然那麼好懂嗎?從傳紙條範例開始,每個概念幾乎都不太難,課綱為何要為了這種東西花一整週——然後才在作業找到答案:廢話,那是因為你還沒開始實作啊!

寫作業的過程艱難到我認為必須將其記錄成筆記,不然幾乎每一題都要先拆解答再看,超心虛的。比如說:為何 request 要放 (err, res, body) ?又或者 post 之後回傳的 body 是什麼?這些感覺好像是約定俗成的東西,都必須一個個去重新摸索。因為幾乎是看著解答寫,讓我超級超級心虛,還好之後有 HTTP-challenge 才比較扎實。

這週的定番果然還是焦慮以及失敗經驗被召喚,不過透過重新檢視這些經驗,似乎又讓自己稍微從這些困擾當時自己的記憶中被釋放,例如重追《排球少年》第二季,主角們好幾次太過著急撞到彼此,讓我想到大學打系排時撞過一次學姊,還因此留下至今還會復發的舊傷,當時我超級無敵愧疚。不過現在回想好像根本就不用那麼愧疚,也許是我太害怕失敗了,上次也看到類似研究說台灣人怕失敗的程度超高,相較之下看著少年們不斷犯錯就覺得好舒壓。

另外第二季新經理是個小時候話劇只演過村人 B 等不起眼角色的人,也沒有什麼值得投入熱情之處,猶豫時甚至還被母親說:「抱著半吊子的心態,加入認真奮鬥的人中,是很失禮的。」這個部分最後當然是被熱血笨蛋主角們感動了,但最讓我有共鳴的是同為球經的學姐說,她自己一開始也不是非常喜歡排球,有些東西是開始做之後慢慢喜歡上的。我覺得這個策略十分有道理,目前決定試試看。

這周開始買了咖啡廳月票,希望能將跟課變成習慣。看了 Huli 說的跳關,我本來還打算在這篇放用 curl 解 HTTP-challenge 和這四週的挑戰題,不過目前繼續往前進才是好的策略。就這樣啦,我要進入第六週了,掰掰。

在 Coding 前,先好好生活

  • 《也許你需要找人聊聊》
  • 《排球少年》

自我檢測簡答

  • 你知道網路背後大概的運作模式
    可看第一週。
  • 你知道什麼是 Request 跟 Response
    通常使用者會透過瀏覽器對後方資料庫發出 request ,收到 request 後會回傳 response。
  • 你知道什麼是 DNS 以及運作原理
    DNS 的全名是 Domain Name System ,也就是網域名稱系統。我們平時看到的網址叫網域(url),但實際上電腦可以讀的是 IP 位置,所以當我們將 url 傳送給 DNS 後,它會回傳 IP 位置讓電腦知道資訊要送去哪。
  • 你知道 HTTP 與 HTTPS 的差異
    HTTP 和 HTTPS 都是網路協定標準,只是 HTTPS 多了 安全(secure)
  • 你知道 localhost 跟 127.0.0.1 是什麼
    localhost 是指「這台電腦」的主機名稱。而 127.0.0.1 則是 localhost 預設的 IP 位置。
  • 你知道 GET 與 POST 的差別
    GET 可以得到資訊, POST 則是傳送資料(和 PATCH 不同, POST 會覆蓋舊的資料)。
  • 你知道常用的 HTTP Header
    Request URL 放目標網址。
    Request Method 放 HTTP Method。
    Status Code 表示連接狀態。
  • 你知道什麼是 API
    API 全名為 Application Programming Interface,中文翻譯為「應用程式介面」。簡單來說就是交換資料的管道。
    舉例來說好了,今天你進到一家拉麵店,要如何和廚房說你要什麼品項?因為你已經來過很多次了,所以走到拉麵販賣機前點餐,而 這個販賣機就是 API 。你和廚房可以透過販賣機溝通(使用 API),你開店的時候別人也可以從販賣機點餐(提供 API)。
  • 你會使用 node.js 寫出串接 API 的程式
    會,吃我上面筆記啦。
  • 你知道 HTTP method 有哪些
    最常見的就是 GET 請求資料、 DELETE 刪除資料、POST 新增資料、PATCH 修改資料。
  • 你知道基本的 HTTP statud code,像是 200、301、400、404、500
    status code 分成幾種:

    • 1xx = Informational(資訊)
    • 2xx = Success(成功)
      200:請求成功。
    • 3xx = Redirect(重定向)
      301:重新定位(相較 302 , 301 是永久重新定位)
    • 4xx = User error(客戶端錯誤)
      400:此回應意味伺服器因為收到無效語法,而無法理解請求。
      404:伺服器找不到請求的資源。
    • 5xx = Server error(伺服器端錯誤)
      500:伺服器端發生未知或無法處理的錯誤。

    # 後話
    好啦我先去趕進度了,看大家在討論切版切版卻不知道是什麼,覺得好孤單。看大家慢慢開始想最後幾週可以做的東西,目前的想法是想幫 社團 架一個網站~










Related Posts

Elevate Your Dermatology Practice with the Electric Dermatology Chair

Elevate Your Dermatology Practice with the Electric Dermatology Chair

Return first capital letter and its index

Return first capital letter and its index

[ js筆記 ]立即執行函式IIFE

[ js筆記 ]立即執行函式IIFE


Comments